package site.fantasycube.blog.util.redis;

/**
 * @author 幻&乐
 * @Date 2021/12/26
 * 描述 Redis操作服务层
 */
public interface IRedisCache {


    /**
     *描述： 设置一个38过期的验证码code
     * @author 幻&乐
     * @Date 2021/12/28 15:14
     * @param  email 发送验证码的邮箱
     * @return String 验证码（邮箱+当前时间）例如huanan@qq.com:1231342
     **/
    String setMsg(String email);

    /**
     *描述： 查询当前code是否超时
     * @author 幻&乐
     * @Date 2021/12/28 15:36
     * @param  code 验证码
     * @return 是否过期(false过期)
     **/
    Boolean chackMsg(String code);

    /**
     *描述： 设置永不过期的缓存
     * @author 幻&乐
     * @Date 2021/12/26 3:07
     * @param key
     * @param value
     **/
    void setValue(String key ,Object value);

    /**
     *描述： 为某一个key设置过期时间
     * @author 幻&乐
     * @Date 2021/12/26 22:08
     * @param  key key
     * @param time 过期时间（分钟）
     * @return 是否成功
     **/
    Boolean setOutTime(String key ,Long time);

    /**
     *描述： 设置过期时间的缓存
     * @author 幻&乐
     * @Date 2021/12/26 3:15
     * @param key key
     * @param value value
     * @param time 过期时间，默认为分钟
     **/
    void setValue(String key ,Object value, Long time );

    /**
     *描述： 获取存放的实体类
     * @author 幻&乐
     * @Date 2021/12/26 3:22
     * @param key key
     * @return object 实体类
     **/
    Object getValue(String key);

    /**
     *描述： 根据key删除缓存
     * @author 幻&乐
     * @Date 2021/12/26 3:38
     * @param  key key
     * @return 是否成功
     **/
    Boolean del(String key);

    /**
     *描述： 对该key下的值进行减法
     * @author 幻&乐
     * @Date 2021/12/26 3:28
     * @param  key key
     * @param count 减去的数量
     * @return 减完之后的值
     **/
    Long decrement(String key , Long count);

    /**
     *描述： 对该key下的值进行加法
     * @author 幻&乐
     * @Date 2021/12/26 3:31
     * @param  key key
     * @param count 增加的值
     * @return 增加之后的值
     **/
    Long increment(String key ,Long count);

    /**
     *描述： 设置大小key缓存
     * @author 幻&乐
     * @Date 2021/12/26 3:20
     * @param key1 key1
     * @param key2 key2
     * @param value 实体类
     **/
    void setHash(String key1 ,String key2 ,Object value);

    /**
     *描述： 大小key获取缓存值
     * @author 幻&乐
     * @Date 2021/12/28 14:36
     * @param  key1 大key
     * @param key2 小key
     * @return 对象
     **/
    Object getHash(String key1 ,String key2);

    /**
     *描述： 设置锁
     * @author 幻&乐
     * @Date 2021/12/26 3:46
     * @param  lockKey 锁key
     * @param value 值
     * @param time 时间；默认毫秒
     * @return 是否设置成功
     **/
    Boolean setLock(String lockKey ,Object value ,Long time);
}
